package call

import (
	"fmt"
	"mapreduce-go/common"
	"net/rpc"
)

// 定义一个worker shutdown响应
type ShutdownReply struct {
	Id int // 代表指定worker执行的当前为止的任务数量 任务编号

}

// 实现rpc请求发送函数
// addr 服务器地址
// funcName 函数名
// args 参数
// reply 响应
func Call(addr string, funcName string, args interface{}, reply interface{}) bool {
	// 连接rpc服务
	cli, err := rpc.Dial("tcp", addr)
	if err != nil {
		fmt.Println("error : ", err.Error())
		return false
	}

	defer cli.Close()

	// 调用指定方法
	err = cli.Call(funcName, args, reply)
	if err != nil {
		fmt.Println("error : ", err.Error())
		return false
	}

	return true
}

type RegisterArgs struct {
	WorkerAddr string
}

// 任务参数结构
type DoTaskArgs struct {
	JobName string
	File    string          // 输入文件 只对map任务有用
	Phase   common.JobPhase // 任务类型
	TaskId  int             // 任务编号

	// map需要该参数计算中间结果文件的输出数量
	// reduce需要该参数获取收集中间结果文件的数量
	NumberOtherPhase int // 另一个类型任务总数
}
